package main

import (
	"context"
	"fmt"
	"go_stu/src/day02Demo7/pb"
	"net"

	"github.com/hashicorp/consul/api"
	"google.golang.org/grpc"
)

// 定义类
type Children struct {
}

// 绑定类方法
func (this *Children) SayHello(ctx context.Context, p *pb.Person) (*pb.Person, error) {
	p.Name = "hello " + p.Name
	return p, nil
}

func main() {

	// 把grpc服务，注册到consul上
	// 1. 初始化consul 配置
	consulConfig := api.DefaultConfig()
	// 2. 创建 consul 对象
	consulClient, err := api.NewClient(consulConfig)
	if err != nil {
		fmt.Println("api.NewClient is err ", err)
	}
	// 3. 告诉consul,即将注册的服务配置信息
	reg := api.AgentServiceRegistration{
		ID:      "bj38",
		Tags:    []string{"grpc", "consul"}, // 服务起别名
		Name:    "grpc And Consul",          // 服务名
		Address: "127.0.0.1",
		Port:    8800,
		Check: &api.AgentServiceCheck{
			CheckID:  "consul grpc test",
			TCP:      "127.0.0.1:8800",
			Timeout:  "1s",
			Interval: "5s",
		},
	}

	// 4.注册grpc服务到consul上
	consulClient.Agent().ServiceRegister(&reg)

	/////////////////////// 以下为 grpc 服务的远程调用 /////////////////////////////////////////////
	fmt.Println("服务启动")
	// 1. 初始化grpc对象
	grpcServer := grpc.NewServer()
	// 2. 注册服务
	pb.RegisterHelloServer(grpcServer, new(Children))
	// 3. 设置监听， 指定IP/port
	lister, err := net.Listen("tcp", ":8800")
	if err != nil {
		fmt.Println("Lister error is ", err)
	}
	defer lister.Close()

	// 4. 启动服务
	grpcServer.Serve(lister)

}
